﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data.SqlClient;
using System.Windows.Forms;
using System.Data;

namespace Assignment_8
{
    class ConnectDB
    {
        private static SqlConnection con;
        private static SqlDataAdapter dataAdapder;
        private static DataSet dataSet;


        public ConnectDB()
        {
            try
            {
                con = new SqlConnection(Properties.Resources.sCN);
            }
            catch (Exception ex)
            {
                MessageBox.Show("Error in connecting to database\n" + ex.Message);
            }
        }

        public void loadDataToGrid(DataGridView dgv)
        {
            try
            {
                con.Open();
                
                // Khởi tạo đối tượng SQL Data Adapter để kết nỗi giữa Dataset và Database
                string query = "SELECT * FROM tbCustomer";
                dataAdapder = new SqlDataAdapter(query, con);

                new SqlCommandBuilder(dataAdapder);

                // Khởi tạo Dataset
                dataSet = new DataSet();

                // Fill dữ liệu từ database vào dataset thông qua dataadapter
                dataAdapder.Fill(dataSet, "Customer");

                // Gán data source cho grid từ dataSet
                dgv.DataSource = dataSet.Tables["Customer"].DefaultView;
            }
            catch (Exception ex)
            {
                MessageBox.Show("Error in loadDataToGrid(): \n" + ex.Message);
            }
            finally
            {
                con.Close();
            }
        }

        public void Add(List<object> lstData)
        {
            try
            {
                // Tạo 1 dòng mới trong dataset
                DataRow row = dataSet.Tables["Customer"].NewRow();
                
                // Vòng lặp duyệt các phần tử trong List đưa vào dòng mới
                for (int i = 0; i < lstData.Count; i++)
                {
                    row[i + 1] = lstData[i].ToString(); // i + 1 để không update ID
                }

                // Add dòng đã có dữ liệu vào dataset
                dataSet.Tables["Customer"].Rows.Add(row);

                // Update về database thông qua data adapter
                dataAdapder.Update(dataSet,"Customer");

                // Xác nhận thay đổi trong dataset
                dataSet.AcceptChanges();
                dataSet.RejectChanges();

                MessageBox.Show("Add new Customer ok!!!");
            }
            catch (Exception ex)
            {
                MessageBox.Show("Error in Add(): \n" + ex.Message);
            }
        }

        public void Update(List<Object> lstData, int index)
        {
            try
            {
                for (int i = 0; i < lstData.Count; i++)
                {
                    dataSet.Tables["Customer"].Rows[index][i + 1] = lstData[i].ToString();
                }
                dataAdapder.Update(dataSet, "Customer");
                dataSet.AcceptChanges();
                dataSet.RejectChanges();
                MessageBox.Show("Update thành công");
                
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        public void Delete(int index)
        {
            try
            {
                dataSet.Tables["Customer"].Rows[index].Delete();
                dataAdapder.Update(dataSet, "Customer");
                dataSet.AcceptChanges();
                dataSet.RejectChanges();
                MessageBox.Show("Delete thành công");
            }
            catch (Exception ex)
            {
                MessageBox.Show("Error in Delele(): \n" + ex.Message);
            }
        }
    }
}
